package sunsun.xiaoli.jiarebang.utils.bluetooth_utils;

import static sunsun.xiaoli.jiarebang.utils.GlobalFlag.DATA_START_FLAG;
import static sunsun.xiaoli.jiarebang.utils.bluetooth_utils.DecodeStringHexUtil.parseHexStringToBytes;

/**
 * @Author:Create by Mr.w
 * @Date:2019/3/11 10:37
 * @Description:
 */
public class byteHe {

    /**
     * 计算校验和，重新组装数据
     *
     * @param bytes
     * @return
     */
    public static byte hexSum(byte... bytes) {
        byte byteSum = (byte) 0;
        for (byte aByte : bytes) {
            byteSum += aByte;
        }
        byte[] byteNew = new byte[bytes.length + 1];
        System.arraycopy(bytes, 0, byteNew, 0, bytes.length);
        byteNew[bytes.length] = byteSum;
        return byteSum;
    }

    /**
     * 计算校验和，重新组装数据
     *
     * @param hexStr
     * @return
     */
    public static byte[] hexSum(String hexStr) {
        byte[] hexToByte = parseHexStringToBytes(hexStr);
        byte byteSum = (byte) 0;
        for (byte aByte : hexToByte) {
            byteSum += aByte;
        }
        byte[] byteNew = new byte[hexToByte.length + 1];
        System.arraycopy(hexToByte, 0, byteNew, 0, hexToByte.length);
        byteNew[hexToByte.length] = byteSum;
        return byteNew;
    }

    public static byte[] buildByte(byte[] bytes) {
        if (bytes.length < 18) {
            byte[] byteTemp = new byte[18];
            byteTemp[0] = DATA_START_FLAG;
            System.arraycopy(bytes, 0, byteTemp, 1, bytes.length);
            byte sum = hexSum(byteTemp);
            byteTemp[17] = sum;
            return byteTemp;
        }else{
            return bytes;
        }
    }

    public static byte[] buildByte(byte type,byte[] bytes) {
        if (bytes.length < 18) {
            byte[] byteTemp = new byte[18];
            byteTemp[0] = DATA_START_FLAG;
            byteTemp[1] = type;
            System.arraycopy(bytes, 0, byteTemp, 2, bytes.length);
            byte sum = hexSum(byteTemp);
            byteTemp[17] = sum;
            return byteTemp;
        }else{
            return bytes;
        }
    }
}
